﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace AutoPlayMedia
{
    public partial class Login : Form
    {
        public Login()
        {
            InitializeComponent();

            //string source = "Hello World!";
            //using (MD5 md5Hash = MD5.Create())
            //{
            //    string hash = GetMd5Hash(md5Hash, source);
            //    /*string str =  embroilString(hash, 10);
            //    string str1 = embroilString(str, 22);
            //    MessageBox.Show(hash +" - " + str + " - " + str1);*/
            //    //Console.WriteLine("The MD5 hash of " + source + " is: " + hash + ".");
            //    MessageBox.Show("The MD5 hash of " + source + " is: " + hash + ".");
            //    Console.WriteLine("Verifying the hash...");
            //    if (VerifyMd5Hash(md5Hash, source, hash))
            //    {
            //        Console.WriteLine("The hashes are the same.");
            //    }
            //    else
            //    {
            //        Console.WriteLine("The hashes are not same.");
            //    }
            //}
        }
        // xáo trộn chuỗi :đầu vào 1 chuỗi và số ký tự đầu tiên lấy
        static string embroilString(string input, int numberFirstChar)
        {
            int inputLength = input.Length;
            if (inputLength == 32)
            {
                string str1 = input.Substring(0, numberFirstChar);
                string str2 = input.Substring(numberFirstChar, inputLength - numberFirstChar);
                string str = str2 + str1;
                //MessageBox.Show(input + " --- " + str1 + " - " + str2 + " -- " + str);
                return str;
            }
            return "";
        }

        static string GetMd5Hash(MD5 md5Hash, string input)
        {
            // Convert the input string to a byte array and compute the hash.
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));
            // Create a new Stringbuilder to collect the bytes
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();
            // Loop through each byte of the hashed data 
            // and format each one as a hexadecimal string.
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            // Return the hexadecimal string.
            return sBuilder.ToString();
        }
        // Verify a hash against a string.
        static bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
        {
            // Hash the input.
            string hashOfInput = GetMd5Hash(md5Hash, input);
            // Create a StringComparer an compare the hashes.
            StringComparer comparer = StringComparer.OrdinalIgnoreCase;
            if (0 == comparer.Compare(hashOfInput, hash))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            bool isCorrect = isCorrectLogin();
            if (!isCorrect)
            {
                lblError.Text = "Tài khoản đăng nhập không đúng !";
                lblError.Visible = true;
            }
            else
            {
                lblError.Text = "Đăng nhập thành công";
                lblError.Visible = true;
            }
        }
        private bool isCorrectLogin()
        {
            string userName = txtUserName.Text;
            string password = txtPassword.Text;

             using (MD5 md5Hash = MD5.Create())
            {
                string hash = GetMd5Hash(md5Hash, userName);
                string pass = embroilString(hash,10);
                StringComparer comparer = StringComparer.OrdinalIgnoreCase;
                if (0 == comparer.Compare(password, pass))
                {
                    return true;
                }
                else
                {
                    return false;
                }
             }
        }
    }
}
